package cn.chengpengper.seckill.goods.service;


import cn.chengpengper.seckill.goods.model.entity.SeckillGoods;

import java.util.List;

/**
 * @author chengpeng.hu
 */
public interface SeckillGoodsDomainService {
    /**
     * 保存商品信息
     *
     * @param seckillGoods 商品实体
     * @return 影响行数
     */
    void saveSeckillGoods(SeckillGoods seckillGoods);

    /**
     * 根据商品ID获取商品详情
     *
     * @param id 商品ID
     * @return 商品详情
     */
    SeckillGoods getSeckillGoodsId(Long id);

    /**
     * 根据秒杀活动ID获取商品列表
     *
     * @param activityId 秒杀活动ID
     * @return 商品列表
     */
    List<SeckillGoods> getSeckillGoodsByActivityId(Long activityId);

    /**
     * 更新商品状态
     *
     * @param status 商品状态
     * @param id     商品ID
     * @return 影响行数
     */
    void updateStatus(Integer status, Long id);

    /**
     * 扣减商品库存以及缓存库存
     *
     * @param count 扣减数量
     * @param id    商品ID
     * @return 是否扣减成功
     */
    boolean decAvailableStock(Integer count, Long id);

    /**
     * 扣减商品库存
     * @param count 扣减数量
     * @param id 商品ID
     * @return 是否扣减成功
     */
    boolean decDbAvailableStock(Integer count,Long id);
    /**
     * 获取商品可用库存
     *
     * @param id 商品ID
     * @return 库存数
     */
    Integer getAvailableStockById(Long id);

    /**
     * 增加商品库存
     *
     * @param count 增加数量
     * @param id    商品ID
     * @return 是否增加成功
     */
    boolean incDbAvailableStock(Integer count, Long id);
}
